package com.mdd.admin.service.system;

import com.mdd.admin.validate.common.PageParam;
import com.mdd.admin.validate.system.CouponParam;
import com.mdd.admin.validate.system.CouponProvideParam;
import com.mdd.admin.vo.system.CouponListVo;
import com.mdd.admin.vo.system.CouponDetailVo;
import com.mdd.common.core.PageResult;
import com.mdd.common.entity.system.Coupon;

import java.util.Map;

/**
 * 优惠券服务接口类
 * @author panweiliang
 */
public interface ICouponService {

    /**
     * 优惠券列表
     *
     * @author panweiliang
     * @param pageParam 分页参数
     * @param params 搜索参数
     * @return PageResult<CouponVo>
     */
    PageResult<CouponListVo> list(PageParam pageParam, Map<String, String> params);

    /**
     * 优惠券详情
     *
     * @author panweiliang
     * @param id 主键ID
     * @return Coupon
     */
    CouponDetailVo detail(Integer id);

    /**
     * 优惠券新增
     *
     * @author panweiliang
     * @param couponParam 参数
     */
    void add(CouponParam couponParam);

    /**
     * 优惠券编辑
     *
     * @author panweiliang
     * @param couponParam 参数
     */
    void edit(CouponParam couponParam);

    /**
     * 优惠券删除
     *
     * @author panweiliang
     * @param id 主键ID
     */
    void del(Integer id);

    /**
     * 发放优惠券
     * @param id
     * @return
     */
    Coupon enable(Integer id);

    /**
     * 结束发放优惠券
     * @param id
     * @return
     */
    Coupon disable(Integer id);

    /**
     * 优惠券不同状态个数
     *
     * @author panweiliang
     * @return Map<String, Object>
     */
    Map<String, Object> count();

    PageResult<CouponListVo> listAvailable(PageParam pageParam, Map<String, String> params);

    void provide(CouponProvideParam couponProvideParam);

    void check(Long timestamp);
}
